// 题目描述
// 讨论 (3K)
// 283. 移动零
// 提示
// 简单
// 2.1K
// 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
// 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
//   示例 1:
// 输入: nums = [0,1,0,3,12]
// 输出: [1,3,12,0,0]
// 示例 2:
// 输入: nums = [0]
// 输出: [0]
//   提示:
// 1 <= nums.length <= 104
// -231 <= nums[i] <= 231 - 1
//   进阶：你能尽量减少完成的操作次数吗？
// 通过次数
// 1.1M
// 提交次数
// 1.7M
// 通过率
// 63.8%
// https://leetcode.cn/problems/move-zeroes/

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place
 instead.
 */
var moveZeroes = function (nums) {
  let i = 0
  let j = 0

  // 遍历一遍数组，将所有非 0 数都向左交换
  for (; j < nums.length; j++) {
    // j 指向非 0 数
    if (nums[j]) {
      [nums[i], nums[j]] = [nums[j], nums[i]]
      ++i
    }
  }
}

const nums = [0, 1, 0, 3, 12]
moveZeroes(nums)
console.log(nums)
